/*
  for
  for in
  for of
    -es中能够表示有结构的数据类型越来越多
    -es5中提供了iterable接口，for of循环的前提
*/
//实现对普通对象的遍历
let foo = {
    name: "caozy",
    store: [1, 2, 3],
    [Symbol.iterator]() {
        let index = 0;
        const self = this;
        return {
            next() {
                const res = {
                    value: self.store[index],
                    done: index >= self.store.length,
                };
                index++;
                return res;
            },
        };
    },
};
// for (let v of foo) {
//   console.log(v);
// }

//迭代器设计模式
// const todos = {
//   life: ["吃饭", "睡觉", "写代码"],
//   learn: ["js", "node", "html"],
//   [Symbol.iterator](){
//     const all = [...this.life, ...this.learn];
//     let index = 0;
//     const self = this;
//     return {
//       next() {
//         const res = {
//           value: all[index],
//           done: index++ >= all.length,
//         };
//         return res;
//       },
//     };
//   },
// };
//生成器改写
const todos = {
    life: ["吃饭", "睡觉", "写代码"],
    learn: ["js", "node", "html"],
    [Symbol.iterator]: function* () {
        const all = [...this.life, ...this.learn];
        for (let i of all) {
            yield i;
        }
    },
};
for (const i of todos) {
    console.log(i);
}
